Atomic Design

πŸ™Œ Container, Presentational μ•ˆλ…•.. Hook μ•ˆλ…•!

μ΄μ „μ—λŠ” λ””λ ‰ν† λ¦¬μ˜ ꡬ쑰λ₯Ό μž‘μ„ λ•Œ, Container Component, Presentational Componentλ₯Ό ν†΅ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€λ‘œμ§μ„ λ‹΄λ‹Ήν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ™€ λ·°λ₯Ό λ‹΄λ‹Ήν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬λΆ„ν•˜μ—¬ κ΄€λ¦¬ν•˜μ˜€μ—ˆλ‹€.

ν•˜μ§€λ§Œ, Hook이 개발되고, Class기반 μ»΄ν¬λ„ŒνŠΈκ°€ μ•„λ‹Œ Function기반의 μ»΄ν¬λ„ŒνŠΈλ₯Ό 주둜 μ‚¬μš©ν•˜κ²Œ λ˜λ©΄μ„œ μ΄λŸ¬ν•œ κ΅¬μ‘°λŠ” 더이상 μ‚¬μš©ν•˜μ§€ μ•Šκ²Œ λ˜μ—ˆλ‹€.

Classκ°€ μ•„λ‹ˆλ”λΌλ„ Hook을 톡해 μ‰½κ²Œ stateλ₯Ό ν˜•μ„±ν•˜κ³ , μ—°κ²°ν•  수 있으며 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ”κ²ƒ λ˜ν•œ κ°€λŠ₯ν•΄μ‘ŒκΈ° λ•Œλ¬Έμ΄λ‹€.

μ΄λ‘œμ„œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 λ·°λ₯Ό ꡬ뢄할 수 μžˆλ‹€λŠ” 점은 μœ μ§€λ˜μ—ˆλ‹€.

πŸ₯Š μ»΄ν¬λ„ŒνŠΈ ꡬ쑰와 κ³ λ―Ό

React와 같은 μ»΄ν¬λ„ŒνŠΈ 기반 ν”„λ ˆμž„μ›Œν¬(라이브러리)의 νŠΉμ§•μ€ 잘 μ„€κ³„λœ μ»΄ν¬λ„ŒνŠΈλΌλ©΄ μž¬ν™œμš©μ΄ μš©μ΄ν•˜λ‹€λŠ” 점이닀. λ°˜λ³΅λ˜λŠ” κ΅¬μ‘°λ‚˜, μŠ€νƒ€μΌμ„ μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ 뿐만 μ•„λ‹ˆλΌ, λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œλ„ μΆ©λΆ„νžˆ μ‚¬μš©ν•  수 μžˆλŠ” κ²½μš°κ°€ μžˆλ‹€.

λ”°λΌμ„œ, Reactμ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈ 상속보단 μ‘°ν•©μ΄λ‚˜ 합성을 μΆ”μ²œν•˜κ³  있고, μ΅œλŒ€ν•œ μž‘μ€ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ”κ²ƒμ΄ μ’‹λ‹€κ³  ν•œλ‹€.

ν•˜μ§€λ§Œ, μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬μ„±ν•˜λ‹€λ³΄λ©΄ μž¬ν™œμš©μ„±μ„ μœ„ν•΄ μ–΄λŠμ •λ„ μˆ˜μ€€μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό 잘게 λ‚˜λˆ μ•Ό ν•˜λŠ”μ§€ 고민을 ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.

심지어 λ‚±κ°œμ˜ div μˆ˜μ€€μœΌλ‘œλ„ λ‚˜λˆ μ•Ό ν•˜λ‚˜ κ³ λ―Όν•œμ λ„ μžˆλ‹€.

사싀 생각해보면 λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ μž¬ν™œμš©ν•  수 μžˆλ‹€λŠ”κ²ƒμ€ 쑰금 무리가 μžˆμ§€ μ•Šλ‚˜ 생각이 λ“ λ‹€. κ·ΈλŸ¬ν•œ 점을 막기 μœ„ν•΄ μ΅œμƒμœ„ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ΅œλŒ€ν•œ 쑰합을 μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ λΆ€ν”Όκ°€ μ–΄λ§ˆμ–΄λ§ˆν•˜κ²Œ μ»€μ Έμ„œ 처음 μ½”λ“œλ₯Ό λ³΄μ•˜μ„ λ•Œ λΆ€λ‹΄μŠ€λŸ½μ§€ μ•Šμ„κΉŒ? λΌλŠ” 이유 λ•Œλ¬Έ

이λ₯Ό λ³΄μ•˜μ„ λ•Œ, μž‘μ€ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ λͺ¨μ—¬ μ„œλ‘œ λ‹€λ₯Έ ꡬ쑰λ₯Ό ν˜•μ„±ν•˜λŠ” 경우, μž¬ν™œμš©μ€ 사싀상 λΆˆκ°€λŠ₯ν•˜μ§€ μ•Šμ„κΉŒ..?

1

components 디렉토리에 μ—¬λŸ¬κ°€μ§€ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ, μ €μ€‘μ—λŠ” μž¬ν™œμš©μ„±μ„ κ³ λ €ν•œ μ»΄ν¬λ„ŒνŠΈμ™€ 그렇지 μ•Šκ³  ꡬ쑰λ₯Ό μž‘κ³ μžˆλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ ν•¨κ»˜ μ‘΄μž¬ν•œλ‹€.

μ΄λŸ¬ν•  λ•Œμ—, κ·Έ λ‘˜μ„ μ–΄λ–»κ²Œ κ΅¬λΆ„ν•΄μ£ΌλŠ”κ²Œ μ’‹μ„κΉŒ? λΌλŠ” 고민도 ν•˜κ²Œλ˜μ—ˆλ‹€.

βš›οΈ Atomic design

atomic-design

κΈ°μ‘΄ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜λŠ” λ°©μ‹κ³ΌλŠ” 쑰금 λ‹€λ₯΄κ²Œ Atomic pattern은 졜 ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒμœ„μ»΄ν¬λ„ŒνŠΈλ‘œ μ΄λ™ν•˜λ©° ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“ λ‹€κ³  ν•œλ‹€.

총 5κ°€μ§€μ˜ μ»΄ν¬λ„ŒνŠΈ μˆ˜μ€€μ΄ μ‘΄μž¬ν•œλ‹€.

🍎 Atoms - μ›μž

atoms
  • Atomic patternμ—μ„œ κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈμ΄λ‹€.
  • img, input, button, labelκ³Ό 같은 HTMLνƒœκ·Έλ“€μ΄ λŒ€λΆ€λΆ„μ΄λ‹€.
  • μ–΄λ– ν•œ 속성값을 λ°›μ•„μ˜€λ”λΌλ„, μ»΄ν¬λ„ŒνŠΈκ°€ μƒμ„±λ˜μ–΄μ•Ό ν•œλ‹€.
  • color, fontκ³Ό 같은 μŠ€νƒ€μΌμ€ κ°–κ³ μžˆμ„ 수 μžˆμ§€λ§Œ, margin, positionλ“± ꡬ쑰에 λ°©ν•΄κ°€ 될 수 μžˆλŠ” μœ„μΉ˜λ₯Ό μ§€μ •ν•˜λŠ” μŠ€νƒ€μΌμ€ κ°€μ§ˆ 수 μ—†λ‹€.
  • 자기 μžμ‹ λ§ŒμœΌλ‘œλŠ” 아직 아무것도 ν•  수 μ—†λŠ” λ‹¨μœ„μ΄λ‹€.

🍊 Molecules - λΆ„μž

molecule
  • μ—¬λŸ¬κ°œμ˜ μ›μžκ°€ μ„žμ—¬μžˆλŠ” λ‹¨μœ„μ΄λ‹€.
  • 자기 μžμ‹ λ§ŒμœΌλ‘œ 무언가λ₯Ό ν•  수 μžˆκ²Œλ˜λŠ” μ΅œμ†Œλ‹¨μœ„μ΄λ‹€.
  • λΆ„μžλ§Œμ˜ 속성을 κ°€μ§ˆ 수 있으며, μžμ‹ μ˜ μ›μžμ— μœ„μΉ˜κ°’μ„ 지정해쀄 수 μžˆλ‹€.
  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ•„λ‹Œ, λ‹¨μˆœ UIλ₯Ό κ·Έλ¦¬λŠ” λ‘œμ§μ„ κ°–κ³  μžˆμ„ 수 μžˆλ‹€.

🍌 Organisms - 유기체

organism
  • μ›μžλ‚˜ λΆ„μžκ°€ μ‘°ν•©λœ λ‹¨μœ„μ΄λ‹€.
  • μ–΄λŠμ •λ„ μƒμ„±ν•˜κ³ μž ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ˜ λͺ¨μŠ΅μ„ κ°–μΆ˜ μƒνƒœμ΄λ‹€.
  • μ›μžλ‚˜ λΆ„μžμ˜ μœ„μΉ˜κ°’μ„ μ‘°μ •ν•  수 μžˆλ‹€.

πŸ‡ Templates - ν…œν”Œλ¦Ώ

template
  • pageμ—μ„œ μ „λ‹¬λ°›λŠ” 유기체 μ΄ν•˜μ˜ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ 자리작게될 ꡬ쑰λ₯Ό μ •ν•˜λŠ” λ‹¨μœ„μ΄λ‹€.
  • color와 같은 μŠ€νƒ€μΌμ΄ μ•„λ‹Œ, μœ„μΉ˜λ₯Ό μ§€μ •ν•΄μ£ΌλŠ” ꡬ쑰λ₯Ό μž‘μ•„μ£ΌλŠ” μŠ€νƒ€μΌλ§Œ μ‘΄μž¬ν•œλ‹€.

πŸ“ Pages - νŽ˜μ΄μ§€

page
  • λΉ„μ¦ˆλ‹ˆμŠ€λ‘œμ§μ΄ κ΄€λ¦¬λ˜λŠ” μ»΄ν¬λ„ŒνŠΈμ΄λ‹€.
  • ꡬ쑰가 작힌 ν…œν”Œλ¦Ώμ— 유기체 μ΄ν•˜μ˜ UIλ₯Ό ν˜•μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λΆ€μ—¬, μ‘°ν•©Β·ν•©μ„± ν•˜λŠ” λ‹¨μœ„μ΄λ‹€.
  • μ›μž, λΆ„μž, μœ κΈ°μ²΄λ“±μ—μ„œ ν•„μš”ν•œ μƒνƒœκ°’(λΉ„μ¦ˆλ‹ˆμŠ€λ‘œμ§)듀은 λͺ¨λ‘ ν•΄λ‹Ή λ‹¨μœ„μ—μ„œ μ†μ„±μœΌλ‘œ μ „λ‹¬λœλ‹€.

πŸŽ“ μ „λ°˜μ μΈ λŠλ‚Œ

  • 유기체 μ΄ν•˜μ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μ—¬λŸ¬ 속성을 받을 수 있기 λ•Œλ¬Έμ—, Typescript와 같은 정적 μ–Έμ–΄λ‘œ κ°€λŠ₯ν•œ μ†μ„±λ“€λ§Œ μ§€μ •ν•΄μ£ΌλŠ”κ²Œ 쒋아보인닀.
  • 자기 μžμ‹ μ˜ ꡬ쑰λ₯Ό κ²°μ •ν•˜λŠ” μŠ€νƒ€μΌμ€ 무쑰건 μƒμœ„μ—μ„œ ν˜•μ„±λ˜λŠ” λŠλ‚Œμ΄λ‹€.

    κ·Έμ™Έμ˜ 색상, 폰트 λ“±μ˜ μŠ€νƒ€μΌμ€ μƒκ΄€μ—†μŒ

  • 쒀더 μƒμœ„μ˜ λ‹¨μœ„λ‘œ 갈 수둝 μž¬μ‚¬μš©μ„±μ€ 비ꡐ적 λ–¨μ–΄μ§€λŠ”λŠλ‚Œμ΄λ‹€.
  • μ΅œμ†Œλ‹¨μœ„μΈ μ›μžκ°€ μ•„λ‹Œ 경우, UIλ₯Ό μœ„ν•œ λ‘œμ§μ€ κ°–κ³  μžˆμ„μˆ˜ μžˆλŠ”κ²ƒ κ°™λ‹€.
  • ν…œν”Œλ¦Ώμ—μ„œλŠ” ν•„μš”ν•œ 속성값을 할당받은 μ—¬λŸ¬ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈλ“€μ„ νŽ˜μ΄μ§€μ—κ²Œμ„œ λ°›μ•„, ꡬ쑰에 λ„£λŠ” 역할을 ν•˜λŠ”κ²ƒ κ°™λ‹€.
  • Naver Lineμ—μ„œ Atomic Design을 μ‚¬μš©ν•œ 컨퍼런슀λ₯Ό μ˜μƒμœΌλ‘œ λ³΄μ•˜λŠ”λ°, ν•„μš”μ— λ”°λΌμ„œλŠ” λΉ„μŠ·ν•œ 역할을 ν•˜λŠ” λ‹¨μœ„λ₯Ό ν•©μ³μ„œ μ‚¬μš©ν•˜κΈ°λ„ ν•˜λŠ”κ²ƒ κ°™λ‹€.

πŸ“š μžλ§€ν’ˆ StoryBook

UIλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ’€ 더 효율적으둜 관리할 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” μ˜€ν”ˆμ†ŒμŠ€λ„κ΅¬λΌκ³ ν•œλ‹€.

κ°„λ‹¨ν•˜κ²Œ μ‚¬μš©μ„ ν•΄λ³΄μ•˜λŠ”λ°, ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ₯Ό ν”„λ‘œμ νŠΈμ—μ„œ μ‹€ν–‰μ‹œν‚€μ§€ μ•Šκ³ , λ³„λ„μ˜ ν™”λ©΄μ—μ„œ 확인할 수 μžˆμ—ˆλ‹€.

μ•„λ¬΄λž˜λ„ μ΅œμ†Œλ‹¨μœ„ μ»΄ν¬λ„ŒνŠΈλ₯Ό 각각 κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, ν•΄λ‹Ή 도ꡬλ₯Ό κ°™μ΄μ‚¬μš©ν•˜λŠ”κ²½μš°κ°€ λ§Žλ‹€κ³  ν•œλ‹€.

μ°Έκ³ 


@SangMin
πŸ‘† H'e'story

πŸš€GitHub